using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Fecha: 6/4/2013 5:51:32 PM
    /// </summary>
    [Serializable]
    public class DocumentoAuditoriaLista : ReadOnlyListBase<DocumentoAuditoriaLista, DocumentoAuditoriaInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(DocumentoAuditoriaLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static DocumentoAuditoriaLista GetDocumentoAuditoriaLista(DocumentoCriteria filter)
        {
            return DataPortal.Fetch<DocumentoAuditoriaLista>(filter);
        }

        private DocumentoAuditoriaLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(DocumentoCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_dtr_tabla_id", criteria.ModuloId),
                        new Parametro("ec_dtr_tabla", criteria.Modulo),
                        new Parametro("ec_dtr_procesado", criteria.Procesado)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_DOCUMENTOS_REVIZAR\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(DocumentoAuditoriaInfo.GetDocumentoAuditoriaInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Fecha: 6/4/2013 5:51:32 PM
    /// </summary>
    [Serializable]
    public class DocumentoAuditoriaInfo : ReadOnlyBase<DocumentoAuditoriaInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public Guid ArchivoId { get; internal set; }
        public string Nombre { get; internal set; }
        public string Descripcion { get; internal set; }
        public DateTime ArchivoFechaCreacion { get; internal set; }
        public string RequiereFirmar { get; internal set; }
        public string Firmado { get; internal set; }
        public DateTime FechaCreacion { get; internal set; }
        public string TipoDocumento { get; internal set; }
        public int Version { get; internal set; }
        public string Referencia { get; internal set; }
        public string Ruta { get; set; }
        public string SubirNuevo { get; internal set; }
        public string ComentarioArchivo { get; internal set; }
        public string ComentarioTecnico { get; internal set; }
        public string TablaInfo { get; internal set; }
        public string Estado { get; internal set; }
       
        public string TablaId { get; internal set; }
        #endregion

        #region Factory Methods

        internal static DocumentoAuditoriaInfo GetDocumentoAuditoriaInfo(DataRow childData)
        {
            return DataPortal.FetchChild<DocumentoAuditoriaInfo>(childData);
        }

        private DocumentoAuditoriaInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        //arc_id     arc_nombre arc_descripcion arc_fecha_creacion arc_requiere_firma arc_firmado arc_fecha_firmado arc_tipo_documento arc_version
        //arc_referencia arc_ruta   arc_cambiar arc_comentario dtr_id     arc_id_1   dtr_fecha          dtr_estado dtr_comentario dtr_tec_revisor 
        //dtr_jefe_revisor dtr_procesado dtr_tabla_id dtr_tabla  

        private void Child_Fetch(DataRow childData)
        {
            if (childData.Table.Columns.Contains("dtr_id"))
                Id = Guid.Parse(childData["dtr_id"].ToString());
            if (childData.Table.Columns.Contains("arc_id"))
                ArchivoId = Guid.Parse(childData["arc_id"].ToString());
            if (childData.Table.Columns.Contains("arc_nombre"))
                Nombre = childData["arc_nombre"].ToString();
            if (childData.Table.Columns.Contains("arc_descripcion"))
                Descripcion = childData["arc_descripcion"].ToString();
            if (childData.Table.Columns.Contains("arc_fecha_creacion"))
                ArchivoFechaCreacion = DateTime.Parse(childData["arc_fecha_creacion"].ToString());
            if (childData.Table.Columns.Contains("arc_requiere_firma"))
                RequiereFirmar = childData["arc_requiere_firma"].ToString().Trim();
            if (childData.Table.Columns.Contains("arc_firmado"))
                Firmado = childData["arc_firmado"].ToString().Trim();
          
            if (childData.Table.Columns.Contains("arc_tipo_documento"))
                TipoDocumento = childData["arc_tipo_documento"].ToString();
            if (childData.Table.Columns.Contains("arc_version"))
                Version = int.Parse(childData["arc_version"].ToString());
            if (childData.Table.Columns.Contains("arc_referencia"))
                Referencia = childData["arc_referencia"].ToString();
            if (childData.Table.Columns.Contains("arc_ruta"))
                Ruta = childData["arc_ruta"].ToString();
            if (childData.Table.Columns.Contains("arc_cambiar"))
                SubirNuevo = childData["arc_cambiar"].ToString();
            if (childData.Table.Columns.Contains("arc_comentario"))
                ComentarioArchivo = childData["arc_comentario"].ToString();

            if (childData.Table.Columns.Contains("dtr_comentario"))
                ComentarioTecnico = childData["dtr_comentario"].ToString();
            if (childData.Table.Columns.Contains("dtr_fecha"))
                FechaCreacion = DateTime.Parse(childData["dtr_fecha"].ToString());
            if (childData.Table.Columns.Contains("dtr_tabla"))
                TablaInfo = childData["dtr_tabla"].ToString();
            if (childData.Table.Columns.Contains("dtr_estado"))
                Estado = childData["dtr_estado"].ToString();
            if (childData.Table.Columns.Contains("dtr_tabla_id"))
                TablaId = childData["dtr_tabla_id"].ToString();
        }

        #endregion
    }
}
